// 方法定义中的泛型
// @author 风杨
// @date 22-9-8 下午4:26
// @see <a href="yueny09@163.com">mailTo: yueny09@163.com</a>
//

pub fn methodWithSyn3(){
    println!("methodWithSyn3");

    let p1 = Point { x: 5, y: 10.4 };
    let p2 = Point { x: "Hello", y: 'c' };

    let p3 = p1.up(p2);
    println!("p3.x = {}, p3.y = {}", p3.x, p3.y);
}

#[derive(Debug)]
struct Point<T, U>{
    x: T,
    y: U
}

/*
Point<f32> 类型会有一个方法 distance_from_origin，
而其他 T 不是 f32 类型的 Point<T> 实例则没有定义此方法。
*/
impl<T, U> Point<T, U> {
    fn up<X, Y>(self, other: Point<X, Y>) -> Point<T, Y> {
        let p = Point {
            x: self.x,
            y: other.y
        };

        p
    }
}